#!/usr/bin/perl
#
# genezzo.pl
# Eric Rollins 2005
#
# This simple sample cgi-bin script provides web access
# to Genezzo. The form is used to submit a SQL statement,
# And the results are returned as XML.
#
# Prior to running this script a Genezzo database must be
# created. The script currently assumes the database was
# created using
# gendba.pl -gnz_home=/unsafe -init
#
# as user www-data. Prior to running this command the
# directory /unsafe must be created and www-data given
# permission to write it.
#
# The /unsafe directory is unsafe since any cgi-bin script can access it.
#
use strict;
use warnings;
use CGI qw(:standard escapeHTML);
my $query = param('query');
if(!defined($query)){
print header();
print start_html("Genezzo");
print "
Enter Genezzo SQL Statement:
\n";
print " \n";
print end_html();
exit();
}
print "Content-type: text/xml\n\n";
print '';
print "\n";
use File::Path;
use File::Spec;
use Data::Dumper;
use Genezzo::GenDBI;
my $dbi_gzerr = sub {
my %args = (@_);
return
unless (exists($args{msg}));
my $sev = "UNKNOWN";
if (exists($args{severity}))
{
$sev = uc($args{severity});
$sev = 'WARNING'
if ($sev =~ m/warn/i);
# don't print 'INFO'
if ($args{severity} =~ m/info/i)
{
return;
}
}
print "\n";
print " ";
print $sev;
print "\n";
print " ";
print __PACKAGE__, ": ", $args{msg};
print "\n";
print "\n";
};
sub return_error
{
my ($where) = @_;
print " ", $where, "\n";
print "\n";
exit();
}
my $gnz_home = "/unsafe";
print "\n";
my $dbh = Genezzo::GenDBI->connect($gnz_home,
"NOUSER",
"NOPASSWORD",
{GZERR => $dbi_gzerr,
PrintError => 0,
RaiseError => 0});
if(!defined($dbh)){
return_error("connect");
}
$dbh->do("startup"); # start the database
my $sth = $dbh->prepare($query);
if(!defined($sth)){
return_error("prepare");
}
my $ret = $sth->execute();
if(!defined($ret)){
return_error("execute");
}
my $numFields = $sth->{NUM_OF_FIELDS};
if(!defined($numFields)){
$ret = $dbh->do("commit");
if(!defined($ret)){
return_error("commit");
}
print "\n";
exit();
}
while (1)
{
my @ggg = $sth->fetchrow_array();
last
unless (scalar(@ggg));
print " \n";
my $i;
for($i = 0; $i < $numFields; $i++){
print " <", $sth->{NAME}->[$i], ">";
print $ggg[$i];
print "", $sth->{NAME}->[$i], ">";
print "\n"
}
print "
\n";
}
print "\n";